package com.zenithmind.chat.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.zenithmind.chat.pojo.entity.ChatGroupSetting;
import com.zenithmind.chat.pojo.dto.ChatGroupSettingDTO;
import com.zenithmind.chat.pojo.vo.ChatGroupSettingVO;

import java.util.List;

/**
 * 群组设置服务接口 - 遵循单一职责原则
 * 只负责群组设置的业务逻辑处理
 * 
 * @author ZenithMind Team
 * @since 2025-01-09
 */
public interface ChatGroupSettingService extends IService<ChatGroupSetting> {

    /**
     * 获取群组设置
     * 
     * @param groupId 群组ID
     * @return 群组设置
     */
    ChatGroupSettingVO getGroupSetting(String groupId);

    /**
     * 更新群组设置
     * 
     * @param dto 设置信息
     * @param operatorId 操作人ID
     * @return 更新结果
     */
    Boolean updateGroupSetting(ChatGroupSettingDTO dto, String operatorId);

    /**
     * 创建默认群组设置
     * 
     * @param groupId 群组ID
     * @param creatorId 创建人ID
     * @return 设置ID
     */
    String createDefaultSetting(String groupId, String creatorId);

    /**
     * 删除群组设置
     * 
     * @param groupId 群组ID
     * @param operatorId 操作人ID
     * @return 删除结果
     */
    Boolean deleteGroupSetting(String groupId, String operatorId);

    /**
     * 更新群组名称
     * 
     * @param groupId 群组ID
     * @param groupName 群组名称
     * @param operatorId 操作人ID
     * @return 更新结果
     */
    Boolean updateGroupName(String groupId, String groupName, String operatorId);

    /**
     * 更新群组描述
     * 
     * @param groupId 群组ID
     * @param description 群组描述
     * @param operatorId 操作人ID
     * @return 更新结果
     */
    Boolean updateGroupDescription(String groupId, String description, String operatorId);

    /**
     * 更新群组头像
     * 
     * @param groupId 群组ID
     * @param avatar 群组头像
     * @param operatorId 操作人ID
     * @return 更新结果
     */
    Boolean updateGroupAvatar(String groupId, String avatar, String operatorId);

    /**
     * 更新群组公告
     * 
     * @param groupId 群组ID
     * @param notice 群组公告
     * @param operatorId 操作人ID
     * @return 更新结果
     */
    Boolean updateGroupNotice(String groupId, String notice, String operatorId);

    /**
     * 更新加群验证设置
     * 
     * @param groupId 群组ID
     * @param joinVerification 是否需要验证
     * @param operatorId 操作人ID
     * @return 更新结果
     */
    Boolean updateJoinVerification(String groupId, Boolean joinVerification, String operatorId);

    /**
     * 更新全员禁言设置
     * 
     * @param groupId 群组ID
     * @param allMuted 是否全员禁言
     * @param operatorId 操作人ID
     * @return 更新结果
     */
    Boolean updateAllMuted(String groupId, Boolean allMuted, String operatorId);

    /**
     * 更新群组可见性设置
     * 
     * @param groupId 群组ID
     * @param isPublic 是否公开
     * @param operatorId 操作人ID
     * @return 更新结果
     */
    Boolean updateGroupVisibility(String groupId, Boolean isPublic, String operatorId);

    /**
     * 更新成员邀请权限
     * 
     * @param groupId 群组ID
     * @param allowMemberInvite 是否允许成员邀请
     * @param operatorId 操作人ID
     * @return 更新结果
     */
    Boolean updateMemberInvitePermission(String groupId, Boolean allowMemberInvite, String operatorId);

    /**
     * 更新群组最大成员数
     * 
     * @param groupId 群组ID
     * @param maxMembers 最大成员数
     * @param operatorId 操作人ID
     * @return 更新结果
     */
    Boolean updateMaxMembers(String groupId, Integer maxMembers, String operatorId);

    /**
     * 更新消息保留天数
     * 
     * @param groupId 群组ID
     * @param messageRetentionDays 消息保留天数
     * @param operatorId 操作人ID
     * @return 更新结果
     */
    Boolean updateMessageRetentionDays(String groupId, Integer messageRetentionDays, String operatorId);

    /**
     * 批量更新群组设置
     * 
     * @param groupIds 群组ID列表
     * @param dto 设置信息
     * @param operatorId 操作人ID
     * @return 更新结果
     */
    Boolean batchUpdateGroupSettings(List<String> groupIds, ChatGroupSettingDTO dto, String operatorId);

    /**
     * 重置群组设置为默认值
     * 
     * @param groupId 群组ID
     * @param operatorId 操作人ID
     * @return 重置结果
     */
    Boolean resetToDefault(String groupId, String operatorId);

    /**
     * 复制群组设置
     * 
     * @param sourceGroupId 源群组ID
     * @param targetGroupId 目标群组ID
     * @param operatorId 操作人ID
     * @return 复制结果
     */
    Boolean copyGroupSettings(String sourceGroupId, String targetGroupId, String operatorId);

    /**
     * 检查群组设置权限
     * 
     * @param groupId 群组ID
     * @param userId 用户ID
     * @param settingType 设置类型
     * @return 是否有权限
     */
    Boolean checkSettingPermission(String groupId, String userId, String settingType);

    /**
     * 获取群组设置历史
     * 
     * @param groupId 群组ID
     * @param pageNum 页码
     * @param pageSize 页大小
     * @return 设置历史列表
     */
    List<ChatGroupSettingVO> getSettingHistory(String groupId, Integer pageNum, Integer pageSize);

    /**
     * 导出群组设置
     * 
     * @param groupId 群组ID
     * @param operatorId 操作人ID
     * @return 导出文件路径
     */
    String exportGroupSettings(String groupId, String operatorId);

    /**
     * 导入群组设置
     * 
     * @param groupId 群组ID
     * @param filePath 文件路径
     * @param operatorId 操作人ID
     * @return 导入结果
     */
    Boolean importGroupSettings(String groupId, String filePath, String operatorId);
}
